import json

import requests

from langchain.agents.tools import Tool


def get_weather(city):
    """
        1. 本地实现逻辑：不需要跟第三方交互
        2. 通过与第三方交互，获的结果，请求方式或http或client请求
    """
    return "sunny"


def GetProductInfoByCode(code):
    """
    通过产品code获取产品的信息
    """
    url = "http://172.16.1.88:16809/api/Business/ProductInfo/GetProductInfoByCode"  # 设置要访问的URL地址
    params = {
        'code': code,
    }  # 设置要传递的参数
    response = requests.get(url, params=params)  # 发送带有参数的GET请求
    if response.status_code == 200:
        productdic: dict = json.loads(response.text)
        productinfo = f"""
        成品设计：{productdic['productDefineIdDesc']['code']}
        成品编号：{productdic['code']}
        成品识别码：{productdic['fullCode']}
        注册登记项 1.初始脉冲：{productdic['propertys']['InitPulse']}  2.初始读数：{productdic['propertys']['InitWater']}
        构成组件：{productdic['partIdsDesc'][0]["partDefineInfoName"]} {productdic['partIdsDesc'][1]["partDefineInfoName"]}
        组件定义id:[{productdic['partIdsDesc'][0]['partDefineInfoId']},{productdic['partIdsDesc'][1]['partDefineInfoId']}]
        所属阶段：{productdic['currentStateDesc']}  所属客户：{productdic['customersDesc']}  用途：{productdic['useForTypeDesc']}
        登记状态：{productdic['stateDesc']} 注册人员：{productdic['creator']} 注册时间：{productdic["createTime"]}
        备注：{productdic['remark']}
        """
        return productinfo
    else:
        return "请求失败"


def GetPartDefineInfoById(id):
    """
    通过id获取组件定义信息
    """
    url = "http://172.16.1.88:16808/api/BaseService/Define/GetPartDefineInfoById"  # 设置要访问的URL地址
    params = {
        'isDev': False,
        'id': id
    }  # 设置要传递的参数
    response = requests.get(url, params=params)  # 发送带有参数的GET请求
    if response.status_code == 200:
        partdefinedic: dict = json.loads(response.text)
        partdefineinfo = f"""
                硬件代码：{partdefinedic['code']} 组件名称：{partdefinedic['name']} 组件类别：{partdefinedic['partCategoryIdDesc']}
                工艺状态：{partdefinedic['techStateDesc']}  数据能力：{partdefinedic['capabilityDesc'][0]["label"]}
                注册登记项：{partdefinedic['propertys'][0]["name"]},{partdefinedic['propertys'][1]["name"]}
                创建人：{partdefinedic['creator']} 创建时间：{partdefinedic["createTime"]}
                备注：{partdefinedic['remark']}
                """
        return partdefineinfo
    else:
        return "请求失败"


weather_tool = Tool(name="获取天气工具",
                    description="这是一个调用第三方服务的获取某地区当天天气情况,输入城市名",
                    func=get_weather)

# 根据成品code获取成品信息工具描述信息
ProductInfo_toolDesc = """
输入成品code,返回成品信息,成品可能有多个组件，组件的定义id为32位字符,如645f3de53d14ebd2b3c08278就是一个组件定义id
"""

ProductInfo_tool = Tool(name="根据成品code获取成品信息",
                        description=ProductInfo_toolDesc,
                        func=GetProductInfoByCode)

PartDefineInfo_tool = Tool(name="根据组件定义id获取组件定义信息",
                           description="输入组件定义id（32位字符串,如645f3de53d14ebd2b3c08278），返回组件定义信息",
                           func=GetPartDefineInfoById)

mytools = [weather_tool, ProductInfo_tool, PartDefineInfo_tool]
